The present invention relates to a laser printer controller and more particularly to an alignment device within the controller which sequentially accepts the word by word first word orientation dot-by-dot character pattern for alignment or mapping into a second word orientation having fixed word storage boundaries of a page bit map in a raster memory.
Conventional laser printer engines require data in the form of a bit stream where each bit represents a dot on the ultimately printed page. The data rates required by the printer engines are very high as the laser print engines provide extremely high resolutions and operating speeds. The print engines typically use a video type interface similar to that required by a conventional TV set. This interface requires a burst of data as the laser beam moves across the page with each data bit corresponding to dots on the printed page. The print engine is inactive during periods when the laser beam moves back to the start position for the next line (retrace). A longer inactive period is provided as the beam moves back to the start position and to the top of the next page. The print engine provides timing signals to indicate the start and end of data transfer periods and also the start and end of print pages.
A typical line of data for 81/2 inch wide paper consists of 2650 dots. A typical 11 inch long piece of paper consists of 3300 dot lines or a total of over 8.5 million dots or bits of data for a printed 81/2.times.11 page. Because a typical laser printer can print a page approximately every 4 seconds, the laser printer is an enormous consumer of data and the problems inherent in manipulating and preparing the data for use by the laser engine is staggering.
The laser printer controller of this invention provides a system which efficiently and effectively manipulates this volume of data and which provides the necessary throughput in a time frame which is consistent with the laser printer engine.
The data manipulation task of a typical controller requires the conversion from a page repesentation of ASCII characters and their locations into a page bit map where each dot location on the bit map is represented by one data bit. To generate the page bit map, the characters must be converted from their ASCII representations into a dot-by-dot character pattern, then the character pattern stored in the page bit map at the precise locations which correspond to the character positions. The dot-by-dot character pattern of a typical ASCII character requires an average 30 by 30 dot pattern. Using a 16 bit word, the dot-by-dot character pattern requires an array of data words, three words wide and thirty words high. Specifics with regard to a particular character may change but these averages are generally accurate. Each character is described as having a fixed dot-by-dot character pattern and is associated with a defined base line and lead line from which its position on the printed page and its position relative to adjacent characters is determined.
Because the character locations are generally randomly placed the storage word boundaries of the dot-by-dot character patterns generally do not correspond with the fixed word stage boundaries of the page bit map in the raster memory. Accordingly, the first word orientations of the storage words for the dot-by-dot character patterns must be aligned and repacked into the second word orientation which accommodates the horizontal offset between the respective first word orientations and second word orientations for storage into the raster memory for the page bit map.
Conventional techniques for packing the character patterns into page maps require two storage operations for each word within the character pattern. Conventionally, the most significant bit positions of the first word in the character pattern are loaded into the least significant bit positions of the corresponding word on the page bit map. Next, the least significant bit positions of the first word of the character pattern are stored within the most significant bit positions of the next word within the page bit map. The number of bits moved is determined by the offset between the first word orientation and the second word orientation. Data not written into the page bit map by that portion of the character pattern which is moved to the page bit map, that portion of the word in the page bit map which is not to be overwritten, is typically preserved by disabling the corresponding write enable circuitry during the write operation for the specified memory locations. The above process is repeated until the entire dot-by-dot character pattern has been moved into the page map.
Accordingly, it is easy to see that this technique always requires two data storage cycles into the memory of the page map for each word within the character pattern and is therefore very time consuming and costly for a laser printer controller which must provide a very high data throughput rate.